home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 49 / Amiga Format CD49 (2000-01-17)(Future Publishing)(GB)(Track 1 of 3)[!][issue 2000-02].iso / -serious- / programming / e / lsestuff / old / d3da.e < prev    next >
Text File  |  1999-11-29  |  3KB  |  117 lines

  1. OPT MODULE
  2.  
  3. MODULE 'myoo/xl'
  4.  
  5. OBJECT xnode OF xni
  6.    ylist:PTR TO xli
  7. ENDOBJECT
  8.  
  9. OBJECT ynode OF xni
  10.    zlist:PTR TO xli
  11. ENDOBJECT
  12.  
  13. OBJECT znode OF xni
  14.    value
  15. ENDOBJECT
  16.  
  17. EXPORT OBJECT d3da
  18.    PRIVATE
  19.    xlist:PTR TO xli
  20.    unsetvalue
  21. ENDOBJECT
  22.  
  23. PROC d3da(unsetvalue=NIL) OF d3da
  24.    NEW self.xlist
  25.    self.unsetvalue:=unsetvalue
  26. ENDPROC
  27.  
  28. PROC end() OF d3da
  29.    DEF xnode:PTR TO xnode,
  30.        ynode:PTR TO ynode,
  31.        znode:PTR TO znode,
  32.        nextx, nexty, nextz
  33.    xnode:=self.xlist.first()
  34.    WHILE xnode
  35.       ynode:=xnode.ylist.first()
  36.       WHILE ynode
  37.          znode:=ynode.zlist.first()
  38.          WHILE znode
  39.             nextz:=znode.next
  40.             FastDispose(znode, SIZEOF znode)
  41.             znode:=nextz
  42.          ENDWHILE
  43.          nexty:=ynode.next
  44.          END ynode.zlist
  45.          FastDispose(ynode, SIZEOF ynode)
  46.          ynode:=nexty
  47.       ENDWHILE
  48.       nextx:=xnode.next
  49.       END xnode.ylist
  50.       FastDispose(xnode, SIZEOF xnode)
  51.       xnode:=nextx
  52.    ENDWHILE 
  53.    END self.xlist
  54. ENDPROC
  55.  
  56. PROC set(x, y, z, value) OF d3da
  57.    DEF xnode:PTR TO xnode, ynode:PTR TO ynode, znode:PTR TO znode
  58.    xnode:=self.xlist.find(x)
  59.    IF xnode = NIL
  60.       xnode:=FastNew(SIZEOF xnode)
  61.       xnode.id:=x
  62.       NEW xnode.ylist
  63.       self.xlist.addtail(xnode)
  64.    ENDIF
  65.    ynode:=xnode.ylist.find(y)
  66.    IF ynode = NIL
  67.       ynode:=FastNew(SIZEOF ynode)
  68.       ynode.id:=y
  69.       NEW ynode.zlist
  70.       xnode.ylist.addtail(ynode)
  71.    ENDIF
  72.    znode:=ynode.zlist.find(z)
  73.    IF znode = NIL
  74.       znode:=FastNew(SIZEOF znode)
  75.       znode.id:=z
  76.       ynode.zlist.addtail(znode)
  77.    ENDIF
  78.    znode.value:=value
  79. ENDPROC
  80.  
  81. PROC unset(x, y, z) OF d3da
  82.    DEF xnode:PTR TO xnode, ynode:PTR TO ynode, znode:PTR TO znode
  83.    xnode:=self.xlist.find(x)
  84.    IF xnode = NIL THEN RETURN NIL
  85.    ynode:=xnode.ylist.find(y)
  86.    IF ynode = NIL THEN RETURN NIL
  87.    znode:=ynode.zlist.find(z)
  88.    IF znode = NIL THEN RETURN NIL
  89.    ynode.zlist.remove(znode)
  90.    FastDispose(znode, SIZEOF znode)
  91.    IF ynode.zlist.count()=NIL
  92.       xnode.ylist.remove(ynode)
  93.       END ynode.zlist
  94.       FastDispose(ynode, SIZEOF ynode)
  95.    ENDIF
  96.    IF xnode.ylist.count()=NIL
  97.       self.xlist.remove(xnode)
  98.       END xnode.ylist
  99.       FastDispose(xnode, SIZEOF xnode)
  100.    ENDIF
  101. ENDPROC
  102.  
  103. PROC get(x, y, z) OF d3da
  104.    DEF xnode:PTR TO xnode, ynode:PTR TO ynode, znode:PTR TO znode
  105.    xnode:=self.xlist.find(x)
  106.    IF x = NIL THEN RETURN self.unsetvalue
  107.    ynode:=xnode.ylist.find(y)
  108.    IF y = NIL THEN RETURN self.unsetvalue
  109.    znode:=ynode.zlist.find(z)
  110.    IF z = NIL THEN RETURN self.unsetvalue
  111. ENDPROC znode.value
  112.  
  113.  
  114.  
  115.  
  116.  
  117.